小编典典

什么是 ORM,它是如何工作的,我应该如何使用它?

all

有人建议我将 ORM 用于我正在设计的项目,但我无法找到有关它是什么或它如何工作的信息。

谁能给我简要解释一下什么是 ORM,它是如何工作的,以及我应该如何开始使用它?


阅读 178

收藏
2022-04-14

共1个答案

小编典典

介绍

对象关系映射(ORM) 是一种技术,可让您使用面向对象的范例从数据库中查询和操作数据。在谈论 ORM 时,大多数人指的是实现对象关系映射技术的,因此有“一个 ORM”这个短语。

ORM 库是用您选择的语言编写的完全普通的库,它封装了操作数据所需的代码,因此您不再使用 SQL;您可以使用与您使用的语言相同的语言直接与对象进行交互。

例如,这是一个完全虚构的使用伪语言的案例:

你有一个书类,你想检索作者是“Linus”的所有书。手动,你会做这样的事情:

book_list = new List();
sql = "SELECT book FROM library WHERE author = 'Linus'";
data = query(sql); // I over simplify ...
while (row = data.next())
{
     book = new Book();
     book.setAuthor(row.get('author');
     book_list.add(book);
}

使用 ORM 库,它看起来像这样:

book_list = BookTable.query(author="Linus");

机械部分通过 ORM 库自动处理。

优点和缺点

使用 ORM 可以节省大量时间,因为:

  • DRY:您只在一个地方编写数据模型,并且更容易更新、维护和重用代码。
  • 从数据库处理到I18N ,很多事情都是自动完成的。
  • 它迫使您编写MVC代码,最终使您的代码更简洁。
  • 您不必编写格式不正确的 SQL(大多数 Web 程序员真的很讨厌它,因为 SQL 被视为一种“子”语言,而实际上它是一种非常强大和复杂的语言)。
  • 消毒;使用准备好的语句或事务就像调用方法一样简单。

使用 ORM 库更灵活,因为:

  • 它符合您自然的编码方式(这是您的语言!)。
  • 它抽象了数据库系统,因此您可以随时更改它。
  • 该模型与应用程序的其余部分弱绑定,因此您可以更改它或在其他任何地方使用它。
  • 它使您可以使用像数据继承这样的 OOP 优点而不会头疼。

但是 ORM 可能会很痛苦:

  • 你必须学习它,而且 ORM 库不是轻量级的工具;
  • 你必须设置它。同样的问题。
  • 对于通常的查询,性能还可以,但是对于大型项目,SQL 大师总是会用他自己的 SQL 做得更好。
  • 它抽象了数据库。虽然如果你知道幕后发生的事情是可以的,但对于可以编写非常贪婪的语句的新程序员来说,这是一个陷阱,就像for循环中的重击一样。

如何学习ORM?

嗯,用一个。无论您选择哪个 ORM 库,它们都使用相同的原则。这里有很多 ORM 库:

如果您想在 Web 编程中尝试使用 ORM 库,最好使用整个框架堆栈,例如:

  • Symfony(PHP,使用 Propel 或 Doctrine)。
  • Django(Python,使用内部 ORM)。

不要尝试编写自己的 ORM,除非您想学习一些东西。这是一项巨大的工作,旧的需要花费大量时间和工作才能变得可靠。

2022-04-14